nanomsg的前身是ZeroMQ。本人也是先接觸到ZeroMQ,畢竟ZeroMQ相關資源豐富,較易上手。官方提供了很好的解釋兩者之間的差異(Differences between nanomsg and ZeroMQ)。
由於nanomsg的sample code整理較少,故引用ZeroMQ範例,並改成nanomsg。
// Hello World server
#include <stdio.h>
#include <thread>
#include "nn.h"
#include "reqrep.h"
int main(void)
{
int responder = nn_socket(AF_SP, NN_REP);
int rc = nn_bind(responder, "tcp://127.0.0.1:5555");
if (rc < 0) exit(1);
while (1) {
char *buffer = NULL;
nn_recv(responder, &buffer, NN_MSG, 0);
printf("Received %s\n", buffer);
nn_freemsg(buffer);
std::this_thread::sleep_for(std::chrono::milliseconds(1));
nn_send(responder, "World", 5, 0);
}
return 0;
}
// Hello World client
#include <stdio.h>
#include "nn.h"
#include "reqrep.h"
int main(void)
{
printf("Connecting to hello world server\n");
int requester = nn_socket(AF_SP, NN_REQ);
int rc = nn_connect(requester, "tcp://127.0.0.1:5555");
for (int i = 0;; ++i) {
char *buffer = NULL;
printf("Sending Hello %d\n", i);
nn_send(requester, "Hello", 5, 0);
nn_recv(requester, &buffer, NN_MSG, 0);
printf("Received %s %d\n", buffer, i);
nn_freemsg(buffer);
}
nn_close(requester);
return 0;
}
比較後可以發現,API其實很好置換。
ZeroMQ | nanomsg |
---|---|
zmq_socket |
nn_socket |
zmq_bind |
nn_bind |
zmq_connect |
nn_connect |
zmq_send |
nn_send |
zmq_recv |
nn_recv |
zmq_close |
nn_close |
zmq_ctx_new |
- |
zmq_ctx_destroy |
- |